package com.mvc.controller;

import hbm.Region;
import hbm.RegionDAO;
import hbm.Sucursal;
import hbm.SucursalDAO;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.Session;
import org.hibernate.Transaction;

public class SucursalController extends HttpServlet {

	/**
	 * The doGet method of the servlet. <br>
	 * 
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request
	 *            the request send by the client to the server
	 * @param response
	 *            the response send by the server to the client
	 * @throws ServletException
	 *             if an error occurred
	 * @throws IOException
	 *             if an error occurred
	 */

	public class SucursalRegion {

		private String sucursal;
		private String region;

		public String getRegion() {
			return region;
		}

		public String getSucursal() {
			return sucursal;
		}

		public void setRegion(String region) {
			this.region = region;
		}

		public void setSucursal(String sucursal) {
			this.sucursal = sucursal;
		}

	}

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	@SuppressWarnings("unchecked")
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String opcion = request.getParameter("opcion");

		if (opcion != null && opcion.equals("elimina")) {
			String boton = request.getParameter("boton");
			if (boton == null) {
				List<Sucursal> listaSucursal = new SucursalDAO().findAll();
				request.getSession().setAttribute("listadoSucursal",
						listaSucursal);
				response.sendRedirect("./jsp/eliminarSucursal.jsp");
			} else {
				String idSucursal = request.getParameter("idSucursal");
				Sucursal sucursal = new Sucursal();
				sucursal.setId(Integer.parseInt(idSucursal));
				Session session = new SucursalDAO().getSession();
				Transaction tx = session.beginTransaction();
				Object findAAgain = session.merge(sucursal);
				session.delete(findAAgain);
				tx.commit();
				session.close();
				response.sendRedirect("./jsp/mantenimientoSucursal.jsp");
			}
		}

		if (opcion != null && opcion.equals("sucursal")) {
			String boton = request.getParameter("boton");
			if (boton != null && boton.equals("Guardar")) {

				Sucursal sucursal = new Sucursal();

				String nombreSucursal = request.getParameter("txtnombre");
				String direccionSucursal = request.getParameter("txtdireccion");
				String telefonoSucursal = request.getParameter("txttelefono");
				Integer idRegion = Integer.parseInt(request
						.getParameter("idRegion"));
				Region regionSeleccionado = new RegionDAO().findById(idRegion);
				sucursal.setRegion(regionSeleccionado);
				sucursal.setNombre(nombreSucursal);
				sucursal.setDireccion(direccionSucursal);
				sucursal.setTelefono(telefonoSucursal);

				Session session = new SucursalDAO().getSession();

				Transaction tx = session.beginTransaction();
				session.saveOrUpdate(sucursal);
				tx.commit();
				session.close();
				response.sendRedirect("./jsp/mantenimientoSucursal.jsp");
			}
		}

		if (opcion != null && opcion.equals("consulta")) {
			Session session = new SucursalDAO().getSession();

			List<Sucursal> listaSucursal = new SucursalDAO().findAll();
			// List<Region> listaRegion = new ArrayList<Region>();
			List<SucursalRegion> listaSucursalRegion = new ArrayList<SucursalRegion>();

			Iterator itr = listaSucursal.listIterator();
			if (listaSucursal.size() != 0) {
				while (itr.hasNext()) {
					SucursalRegion sr = new SucursalRegion();
					Sucursal s = (Sucursal) itr.next();
					sr.setSucursal(s.getNombre());
					Region idRegion = s.getRegion();
					Region regionIndex = new RegionDAO().findById(idRegion
							.getId());
					sr.setRegion(regionIndex.getNombre());
					// listaProveedor.add(proveedorIndex);

					listaSucursalRegion.add(sr);
				}
			}
			request.getSession().setAttribute("listaSucursalRegion",
					listaSucursalRegion);
			session.close();
			response.sendRedirect("./jsp/mantenimientoSucursal.jsp");
		}

		if (opcion != null && opcion.equals("edita")) {
			String boton = request.getParameter("boton");
			if (boton == null) {
				List<Sucursal> listaSucursal = new SucursalDAO().findAll();
				request.getSession().setAttribute("listadoSucursal",
						listaSucursal);
				response.sendRedirect("./jsp/seleccionSucursal.jsp");
			}
		}

		if (opcion != null && opcion.equals("filtrar")) {
			Integer idSucursal = Integer.parseInt(request
					.getParameter("idSucursal"));
			Sucursal sucursalSeleccionada = new SucursalDAO()
					.findById(idSucursal);
			request.getSession().setAttribute("idSucursalSeleccionada",
					sucursalSeleccionada.getId());
			request.getSession().setAttribute("nombreSucursalSeleccionada",
					sucursalSeleccionada.getNombre());
			request.getSession().setAttribute("direccionSucursalSeleccionada",
					sucursalSeleccionada.getDireccion());
			request.getSession().setAttribute("telefonoSucursalSeleccionada",
					sucursalSeleccionada.getTelefono());
			List<Region> listaRegion = new RegionDAO().findAll();
			request.getSession().setAttribute("listadoRegion", listaRegion);
			response.sendRedirect("./jsp/editarSucursal.jsp");
		}

		if (opcion != null && opcion.equals("listarSucursal")) {
			List<Region> listaRegion = new RegionDAO().findAll();
			request.getSession().setAttribute("listadoRegion", listaRegion);

			response.sendRedirect("./jsp/ingresoSucursal.jsp");
		}

		if (opcion != null && opcion.equals("editando")) {
			String boton = request.getParameter("boton");
			if (boton != null && boton.equals("Editar")) {
				Integer idSucursal = Integer.parseInt(request
						.getParameter("idSucursal"));
				String nombreSucursal = request.getParameter("txtnombre");
				String direccionSucursal = request.getParameter("txtcodigo");
				String telefonoSucursal = request.getParameter("txttelefono");
				Sucursal sucursalSeleccionada = new SucursalDAO()
						.findById(idSucursal);
				Integer idRegion = Integer.parseInt(request
						.getParameter("idRegion"));
				Region regionSeleccionado = new RegionDAO().findById(idRegion);

				sucursalSeleccionada.setRegion(regionSeleccionado);
				sucursalSeleccionada.setNombre(nombreSucursal);
				sucursalSeleccionada.setDireccion(direccionSucursal);
				sucursalSeleccionada.setDireccion(telefonoSucursal);
				Session session = new SucursalDAO().getSession();

				Transaction tx = session.beginTransaction();
				session.saveOrUpdate(sucursalSeleccionada);
				tx.commit();
				session.close();
				List<Sucursal> listaSucursal = new SucursalDAO().findAll();
				request.getSession().setAttribute("listadoSucursal",
						listaSucursal);
				response.sendRedirect("./jsp/mantenimientoSucursal.jsp");
			}
		}
	}

}
